package com.woniuxy.service;

import com.github.pagehelper.PageInfo;
import com.woniuxy.entity.DTO.FlashSalesDTO;
import com.woniuxy.entity.DTO.QueryAvailableGoodsDTO;
import com.woniuxy.entity.DTO.QueryTimeSaleGoodsDTO;
import com.woniuxy.entity.TimeSaleStatus;
import com.woniuxy.util.PageParam;
import com.woniuxy.util.ResponseData;

import java.text.ParseException;
import java.util.List;

/**
 * @author ：admin
 * @version ：1.0
 * @date ：Created in 2025/5/14 15:18
 * @description ：TODO
 * @modified_by ：
 */
public interface TimeSaleService {
    /**
     * <p>查询所有活动状态。</p>
     * @return 活动状态列表
     */
    List<TimeSaleStatus> queryStatusList();

    /**
     * <p>查询所有活动基本信息。</p>
     *
     * @param param 分页信息（此处 param 为 null ）
     * @return 活动信息列表
     */
    PageInfo<FlashSalesDTO> queryTimeSaleList(PageParam<FlashSalesDTO> param);

    /**
     * <p>根据条件分页查询活动信息。</p>
     * @param param 分页信息、查询条件
     * @return 活动信息列表
     */
    PageInfo<FlashSalesDTO> queryTimeSaleByCondition(PageParam<FlashSalesDTO> param);

    /**
     * <p>添加活动信息。</p>
     *
     * @param flashSalesDTO 活动信息及活动商品信息
     */
    void addTimeSale(FlashSalesDTO flashSalesDTO);

    /**
     * <p>查询所有“已上架”状态，且库存不为 0 的商品。</p>
     *
     * @param name 商品名称，允许为空，为空时查询所有商品
     * @return 商品列表
     */
    List<QueryAvailableGoodsDTO> queryAvailableGoods(String name);

    /**
     * <p>根据活动 ID 查询活动详情。</p>
     * @param saleId 活动 ID
     * @return 活动详情信息
     */
    FlashSalesDTO queryTimeSaleDetail(Integer saleId);

    /**
     * <p>修改活动信息。</p>
     * @param flashSalesDTO 活动信息
     */
    void updateTimeSale(FlashSalesDTO flashSalesDTO);

    /**
     * <p>取消活动。</p>
     *
     * @param saleId 活动 ID
     * @return 是否取消成功
     */
    ResponseData<?> cancelTimeSale(Integer saleId);

    /**
     * <p>根据商品名称查询活动商品信息。</p>
     *
     * @param searchKey 用户输入的商品名称
     * @return 活动商品信息列表
     */
    List<QueryTimeSaleGoodsDTO> queryTimeSaleByGoodsName(String searchKey) throws ParseException;

    /**
     * <p>保存抢购页面添加购物车信息。</p>
     *
     * @param queryTimeSaleGoodsDTOList 购物车信息
     */
    void saveCart(List<QueryTimeSaleGoodsDTO> queryTimeSaleGoodsDTOList);
}
